# 命令模式
# => ⭐命令模式是对请求进行封装，将请求的发送者和接收者解耦，使得请求的发送者和接收者可以独立变化。
# => ⭐命令模式的主要作用是解耦请求的发送者和接收者，使得请求的发送者和接收者可以独立变化。

# 命令模式结构中包含如下角色：
# 1. Command（命令）：定义了命令的接口，声明执行命令的方法。
# 2. ConcreteCommand（具体命令）：实现了 Command 接口，定义了具体的命令。
# 3. Invoker（调用者）：调用命令对象执行请求。
# 4. Receiver（接收者）：执行具体的命令。
# 5. Client（客户端）：创建具体命令对象，并设置命令的接收者。

from abc import ABCMeta, abstractmethod

class Command(metaclass=ABCMeta):
    @abstractmethod
    def execute(self):
        pass

class ConcreteCommand(Command):
    def __init__(self, receiver):
        self.receiver = receiver

    def execute(self):
        self.receiver.action()

class Receiver:
    def action(self):
        print("Receiver action")

class Invoker:
    def __init__(self, command):
        self.command = command

    def execute(self):
        self.command.execute()

if __name__ == "__main__":
    receiver = Receiver()
    command = ConcreteCommand(receiver)
    invoker = Invoker(command)
    invoker.execute()
    # Output: Receiver action